package co.edu.ecci.simulador.icetex.ui;

import co.edu.ecci.simulador.icetex.negocio.NSimulador;
import co.edu.ecci.simulador.icetex.vo.Parametros;
import co.edu.ecci.simulador.icetex.vo.VoDatosEntrada;
import co.edu.ecci.simulador.icetex.vo.VoResultado;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;

import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;

@ManagedBean(name = "simuladorMB")
public class simuladorBean {

    private static final Logger LOG = Logger.getLogger(simuladorBean.class.getName());
    private ResourceBundle MSG = ResourceBundle.getBundle("co.edu.ecci.simulador.icetex.resources.data");
    private VoDatosEntrada datosEntrada = new VoDatosEntrada();
    private VoResultado resultado = new VoResultado();
    private Parametros params = new Parametros();
    private List<Long> estratoList;

    public simuladorBean() {
        this.llenarEstrato();
    }

    private void llenarEstrato() {
        estratoList = new ArrayList<>();
        for (int i = 1; i <= Integer.valueOf(MSG.getString("no_maxEstrato")); i++) {
            estratoList.add(new Long(i));
        }
    }

    public void ejecutarConsulta() {
        try {
            resultado = new NSimulador().obtenerCotizacion(datosEntrada);
            RequestContext requestContext = RequestContext.getCurrentInstance();
            requestContext.execute("$('#form\\\\:pnlResultado').hide().fadeIn('slow')");
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Ejecución correcta.", "Calculo realizado."));
        } catch (Exception ex) {
            Logger.getLogger(simuladorBean.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error interno.", "Ha ocurrido un error en la ejecución del cálculo."));
        }
    }

    public VoDatosEntrada getDatosEntrada() {
        return datosEntrada;
    }

    public void setDatosEntrada(VoDatosEntrada datosEntrada) {
        this.datosEntrada = datosEntrada;
    }

    public List<Long> getEstratoList() {
        return estratoList;
    }

    public void setEstratoList(List<Long> estratoList) {
        this.estratoList = estratoList;
    }

    public ResourceBundle getMSG() {
        return MSG;
    }

    public void setMSG(ResourceBundle MSG) {
        this.MSG = MSG;
    }

    public VoResultado getResultado() {
        return resultado;
    }

    public void setResultado(VoResultado resultado) {
        this.resultado = resultado;
    }

    public Parametros getParams() {
        return params;
    }

    public void setParams(Parametros params) {
        this.params = params;
    }
}
